package com.wtb.javatool.dao;

import com.wtb.javatool.dto.AssignmentDto;
import com.wtb.javatool.dto.LineDto;
import com.wtb.javatool.entity.Line;
import com.wtb.javatool.entity.LineAssignment;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

@Mapper
public interface LineMapper {
    /**
     * 新增项目产线
     *
     * @param line 产线实体，包含 lineName、projectId、createTime
     */
    void addLine(Line line);

    /**
     * 根据项目ID查询普通项目产线Id列表
     *
     * @param projectId 项目Id
     * @return 产线Id列表
     */
    List<Long> findLineIdsByProjectId(@Param("projectId") Long projectId);

    /**
     * 根据产线Id列表查询普通项目产线详情信息
     *
     * @param lineIds 产线Id列表
     * @return LineDto列表
     */
    List<LineDto> findNormalLinesByLineIds(@Param("lineIds") List<Long> lineIds);

    /**
     * 根据产线Id列表查询课程项目产线详情信息
     *
     * @param lineIds 产线Id列表
     * @return LineDto列表
     */
    List<LineDto> findTeachingLinesByLineIds(@Param("lineIds") List<Long> lineIds);

    /**
     * 根据产线Id查询项目产线详情信息
     *
     * @param lineId 产线Id
     * @return LineDto
     */
    LineDto findLineByLineId(Long lineId);

    /**
     * 删除所有产线节点
     *
     * @param lineId 产线ID
     */
    void deleteLineAssignments(@Param("lineId") Long lineId);

    /**
     * 插入产线节点
     *
     * @param lineId             产线ID
     * @param lineAssignmentList 产线节点列表
     */
    void addLineAssignments(@Param("lineId") Long lineId, @Param("list") List<LineAssignment> lineAssignmentList);

    /**
     * 删除产线
     *
     * @param lineId 产线id
     */
    void deleteLine(Long lineId);

    /**
     * 修改产线名称
     *
     * @param lineId   产线Id
     * @param lineName 产线名称
     */
    void updateLineName(@Param("lineId") Long lineId, @Param("lineName") String lineName);

    /**
     * 查询某个产线下的所有节点记录
     *
     * @param lineId 产线id
     * @return AssignmentDto列表，包含分配记录id与节点顺序
     */
    List<LineAssignment> findLineAssignmentByLineId(Long lineId);

    /**
     * 查询分配记录是否被作为产线节点
     *
     * @param assignmentIds 分配记录ID列表
     * @return 返回分配记录中被作为节点的个数
     */
    int findLineAssignmentByAssignmentIds(@Param("list") List<Long> assignmentIds);
}
